CREATE TABLE PermissoesTela (
  idPermissaoT INTEGER  NOT NULL   IDENTITY ,
  descricaoArea VARCHAR    ,
  area VARCHAR      ,
PRIMARY KEY(idPermissaoT));
GO




CREATE TABLE pagamentosLoja (
  idpagamentosLoja INTEGER  NOT NULL   IDENTITY ,
  descricao TEXT    ,
  valorTotal DECIMAL(10,2)    ,
  valorPago DECIMAL(10,2)    ,
  valorRestante DECIMAL(10,2)    ,
  dataVencimento DATE    ,
  dataPagamento DATE    ,
  situacao BIT      ,
PRIMARY KEY(idpagamentosLoja));
GO




CREATE TABLE Uf (
  ufNome VARCHAR(2)  NOT NULL    ,
PRIMARY KEY(ufNome));
GO




CREATE TABLE TipoProduto (
  idTipo INT  NOT NULL   IDENTITY ,
  descricao VARCHAR(45)      ,
PRIMARY KEY(idTipo));
GO




CREATE TABLE FormaPagamento (
  idFormaPagamento INT  NOT NULL   IDENTITY ,
  descricao VARCHAR(40)      ,
PRIMARY KEY(idFormaPagamento));
GO




CREATE TABLE Cidade (
  idCidade INT  NOT NULL   IDENTITY ,
  Uf_ufNome VARCHAR(2)  NOT NULL  ,
  cidade VARCHAR(50)      ,
PRIMARY KEY(idCidade)  ,
  FOREIGN KEY(Uf_ufNome)
    REFERENCES Uf(ufNome));
GO


CREATE INDEX cde_cidade_FKIndex1 ON Cidade (Uf_ufNome);
GO


CREATE INDEX IFK_Rel_04 ON Cidade (Uf_ufNome);
GO


CREATE TABLE Endereco (
  idEndereco INT  NOT NULL   IDENTITY ,
  Cidade_idCidade INT  NOT NULL  ,
  descricao VARCHAR(60)    ,
  complemento VARCHAR(40)    ,
  bairro VARCHAR(50)    ,
  cep VARCHAR(8)    ,
  numero BIGINT      ,
PRIMARY KEY(idEndereco)  ,
  FOREIGN KEY(Cidade_idCidade)
    REFERENCES Cidade(idCidade));
GO


CREATE INDEX end_endereco_FKIndex1 ON Endereco (Cidade_idCidade);
GO


CREATE INDEX IFK_Rel_05 ON Endereco (Cidade_idCidade);
GO


CREATE TABLE Usuario (
  idUsuario INTEGER  NOT NULL   IDENTITY ,
  Endereco_idEndereco INT  NOT NULL  ,
  nome VARCHAR(100)    ,
  rg VARCHAR(13)    ,
  cpf VARCHAR(13)    ,
  dataNascimento DATE    ,
  telefone VARCHAR(14)    ,
  celular VARCHAR(14)    ,
  dataEntrada DATE    ,
  usuarioEntrada VARCHAR(20)    ,
  dataAlteracao DATE    ,
  usuarioAlteracao VARCHAR(20)      ,
PRIMARY KEY(idUsuario)  ,
  FOREIGN KEY(Endereco_idEndereco)
    REFERENCES Endereco(idEndereco));
GO


CREATE INDEX Funcionario_FKIndex1 ON Usuario (Endereco_idEndereco);
GO


CREATE INDEX IFK_Rel_17 ON Usuario (Endereco_idEndereco);
GO


CREATE TABLE Caixa (
  idCaixa INTEGER  NOT NULL   IDENTITY ,
  Usuario_idUsuario INTEGER  NOT NULL  ,
  isaberto BIT    ,
  dataAbertura DATETIME    ,
  valorAbertura DECIMAL    ,
  isfechado BIT    ,
  data_Fechamento DATETIME    ,
  valorFechamento DECIMAL      ,
PRIMARY KEY(idCaixa)  ,
  FOREIGN KEY(Usuario_idUsuario)
    REFERENCES Usuario(idUsuario));
GO


CREATE INDEX Caixa_FKIndex1 ON Caixa (Usuario_idUsuario);
GO


CREATE INDEX IFK_Rel_16 ON Caixa (Usuario_idUsuario);
GO


CREATE TABLE Login (
  idLogin INTEGER  NOT NULL   IDENTITY ,
  Usuario_idUsuario INTEGER  NOT NULL  ,
  usuario VARCHAR(20)    ,
  senha VARCHAR(8)    ,
  usuarioEntrada VARCHAR(20)    ,
  dataEntrada DATE      ,
PRIMARY KEY(idLogin)  ,
  FOREIGN KEY(Usuario_idUsuario)
    REFERENCES Usuario(idUsuario));
GO


CREATE INDEX Login_FKIndex1 ON Login (Usuario_idUsuario);
GO


CREATE INDEX IFK_Rel_13 ON Login (Usuario_idUsuario);
GO


CREATE TABLE Fornecedor (
  idFornecedor INT  NOT NULL   IDENTITY ,
  Endereco_idEndereco INT  NOT NULL  ,
  descricao VARCHAR(45)    ,
  cnpj_cpf VARCHAR(14)    ,
  inscest_rg VARCHAR(20)    ,
  tipoTelefone VARCHAR(30)    ,
  fone1 VARCHAR(10)    ,
  fone2 VARCHAR(10)    ,
  celular VARCHAR(10)    ,
  email VARCHAR(60)    ,
  usuarioEntrada VARCHAR(20)    ,
  dataEntrada DATE    ,
  usuarioAlteracao VARCHAR(20)    ,
  dataAlteracao DATE      ,
PRIMARY KEY(idFornecedor)  ,
  FOREIGN KEY(Endereco_idEndereco)
    REFERENCES Endereco(idEndereco));
GO


CREATE INDEX fcr_fornecedor_FKIndex1 ON Fornecedor (Endereco_idEndereco);
GO


CREATE INDEX IFK_Rel_19 ON Fornecedor (Endereco_idEndereco);
GO


CREATE TABLE Permissoes (
  idPermissoes INTEGER  NOT NULL   IDENTITY ,
  Login_idLogin INTEGER  NOT NULL  ,
  PermissoesTela_idPermissaoT INTEGER  NOT NULL    ,
PRIMARY KEY(idPermissoes, Login_idLogin, PermissoesTela_idPermissaoT)    ,
  FOREIGN KEY(PermissoesTela_idPermissaoT)
    REFERENCES PermissoesTela(idPermissaoT),
  FOREIGN KEY(Login_idLogin)
    REFERENCES Login(idLogin));
GO


CREATE INDEX pst_PermissoesTela_has_lgn_login_FKIndex1 ON Permissoes (PermissoesTela_idPermissaoT);
GO
CREATE INDEX pst_PermissoesTela_has_lgn_login_FKIndex2 ON Permissoes (Login_idLogin);
GO


CREATE INDEX IFK_Rel_01 ON Permissoes (PermissoesTela_idPermissaoT);
GO
CREATE INDEX IFK_Rel_02 ON Permissoes (Login_idLogin);
GO


CREATE TABLE Venda (
  idVenda INT  NOT NULL   IDENTITY ,
  FormaPagamento_idFormaPagamento INT  NOT NULL  ,
  Usuario_idUsuario INTEGER  NOT NULL  ,
  valorTotal DECIMAL(10,2)    ,
  desconto DECIMAL(10,2)    ,
  valorEntrada DECIMAL(10,2)    ,
  valorAvista DECIMAL(10,2)    ,
  totalLucro DECIMAL(10,2)    ,
  valorPago DECIMAL(10,2)    ,
  parcelas INTEGER    ,
  troco DECIMAL    ,
  dataVenda DATE    ,
  bandeiraCartao VARCHAR(30)    ,
  usuarioEntrada VARCHAR(20)    ,
  dataEntrada DATE    ,
  usuarioAlteracao VARCHAR(20)    ,
  dataAlteracao DATE      ,
PRIMARY KEY(idVenda)    ,
  FOREIGN KEY(Usuario_idUsuario)
    REFERENCES Usuario(idUsuario),
  FOREIGN KEY(FormaPagamento_idFormaPagamento)
    REFERENCES FormaPagamento(idFormaPagamento));
GO


CREATE INDEX Venda_FKIndex2 ON Venda (Usuario_idUsuario);
GO
CREATE INDEX Venda_FKIndex3 ON Venda (FormaPagamento_idFormaPagamento);
GO


CREATE INDEX IFK_Rel_12 ON Venda (Usuario_idUsuario);
GO
CREATE INDEX IFK_Rel_08 ON Venda (FormaPagamento_idFormaPagamento);
GO


CREATE TABLE Produto (
  idProduto INT  NOT NULL   IDENTITY ,
  Fornecedor_idFornecedor INT  NOT NULL  ,
  TipoProduto_idTipo INT  NOT NULL  ,
  descricao VARCHAR(45)    ,
  quantidade INTEGER    ,
  quantidadeEstoque INTEGER    ,
  valorCompra DECIMAL(10,2)    ,
  valorVenda DECIMAL(10,2)    ,
  valorTotal DECIMAL(10,2)    ,
  fabricante VARCHAR(60)    ,
  unidade VARCHAR(2)    ,
  metrica INTEGER    ,
  classificacao VARCHAR(30)    ,
  percetual INT    ,
  usuarioEntrada VARCHAR(20)    ,
  dataEntrada DATE    ,
  usuarioAlteracao VARCHAR(20)    ,
  dataAlteracao DATE      ,
PRIMARY KEY(idProduto)    ,
  FOREIGN KEY(TipoProduto_idTipo)
    REFERENCES TipoProduto(idTipo),
  FOREIGN KEY(Fornecedor_idFornecedor)
    REFERENCES Fornecedor(idFornecedor));
GO


CREATE INDEX pdo_produto_FKIndex1 ON Produto (TipoProduto_idTipo);
GO
CREATE INDEX Produto_FKIndex2 ON Produto (Fornecedor_idFornecedor);
GO


CREATE INDEX IFK_Rel_14 ON Produto (TipoProduto_idTipo);
GO
CREATE INDEX IFK_Rel_22 ON Produto (Fornecedor_idFornecedor);
GO


CREATE TABLE Itemvenda (
  idItemVenda INTEGER  NOT NULL   IDENTITY ,
  Produto_idProduto INT  NOT NULL  ,
  Venda_idVenda INT  NOT NULL  ,
  quantidade INT    ,
  precoUnitario DECIMAL(10,2)    ,
  precoTotal DECIMAL(10,2)      ,
PRIMARY KEY(idItemVenda, Produto_idProduto, Venda_idVenda)    ,
  FOREIGN KEY(Produto_idProduto)
    REFERENCES Produto(idProduto),
  FOREIGN KEY(Venda_idVenda)
    REFERENCES Venda(idVenda));
GO


CREATE INDEX pdo_produto_has_vda_venda_FKIndex1 ON Itemvenda (Produto_idProduto);
GO
CREATE INDEX pdo_produto_has_vda_venda_FKIndex2 ON Itemvenda (Venda_idVenda);
GO


CREATE INDEX IFK_Rel_12 ON Itemvenda (Produto_idProduto);
GO
CREATE INDEX IFK_Rel_13 ON Itemvenda (Venda_idVenda);
GO



